﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 02/04/2014
 * Time: 06:42 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;
using Gestión_UTN.Entities;
using Gestión_UTN.bo;

namespace Gestión_UTN.blimpl
{
	/// <summary>
	/// Description of materiaProfesorblimpl.
	/// </summary>
	public class materiaProfesorblimpl:Gestión_UTN.bl.materiaProfesobl
	{
		private static Gestión_UTN.da.materiaProfesorda createMatPro = Gestión_UTN.factories.dafactory.createMatPro();
		private static Gestión_UTN.bl.profesorbl createProfesor = Gestión_UTN.factories.blfactory.createProfesor();
		private static Gestión_UTN.bl.materiabl createMateria = Gestión_UTN.factories.blfactory.createMateria();
		private static Gestión_UTN.bl.cursadabl createCursada = Gestión_UTN.factories.blfactory.createCursada();
		
		public materiaProfesorblimpl()
		{
		}
		
		public bool SaveMateriaProfesor(int mat_id, int pro_dni, int cur_id)
		{
			bool ingresada = false;
			
			try 
			{
				ingresada = (0 != mat_id && 0 != pro_dni && 0 != cur_id)
					? createMatPro.SaveMateriaProfesor(mat_id,pro_dni,cur_id)
					: false;
			} 
			catch (Exception) 
			{
				ingresada = false;
			}
			
			return ingresada;
		}
		
		public bool DeleteMateriaProfesor(int mat_id, int cur_id)
		{
			bool eliminada = false;
			
			try 
			{
				eliminada = (0 != mat_id && 0 != cur_id)
					? createMatPro.DeleteMateriaProfesor(mat_id,cur_id)
					: false;
			} 
			catch (Exception) 
			{
				eliminada = false;
			}
			
			return eliminada;
		}
		
		public bool ModifyMateriaProfesor(int mat_id_anterior, int pro_dni_anterior, int cur_id_anterior, int mat_id, int pro_dni, int cur_id)
		{
			bool modificada = false;
			
			try 
			{
				modificada = (0 != mat_id_anterior && 0 != pro_dni_anterior && 0 != cur_id_anterior && 0 != mat_id
				               && 0 != pro_dni && 0 != cur_id)
					? createMatPro.ModifyMateriaProfesor(mat_id_anterior, pro_dni_anterior, cur_id_anterior, mat_id, pro_dni, cur_id)
					: false;
			} 
			catch (Exception) 
			{
				modificada = false;
			}
			
			return modificada;
		}
		
		public System.Data.DataTable FindAllMateriaProfesor()
		{
			DataTable tablaMatPro = null;
			
			try 
			{
				tablaMatPro = createMatPro.FindAllMateriaProfesor();
			} 
			catch (Exception) 
			{
				tablaMatPro = null;
			}
			
			return tablaMatPro;
		}
		
		public Gestión_UTN.bo.MateriasProfesorbo FindMateriaProfesorByDni(int pro_dni)
		{
			MateriasProfesorbo matsProfs = null;
			
			 try
			 {
			 	Profesorbo pro = (0 != pro_dni)
			 		? createProfesor.FindProfesorByDNI(pro_dni)
			 		:null;
			 	
			 	List<MateriaProfesor> matsPro = (null != pro)
			 		? createMatPro.FindMateriaProfesorByDni(pro.Dni)
			 		:null;
			 	
			 	if (null != matsPro) 
			 	{
			 		
			 		List<Materiabo> materias =new List<Materiabo>();
			 		List<Cursadabo> cursadas = new List<Cursadabo>();
			 		
			 		foreach (MateriaProfesor m in matsPro) 
			 		{
			 			Materiabo mat = createMateria.FindMateriaByMatId(m.Mat_id);
			 			
			 			materias.Add(mat);
			 			
			 			mat = null;
			 			
			 			Cursadabo cur = createCursada.FindCursadasById(m.Cur_id);
			 			
			 			cursadas.Add(cur);
			 			
			 			cur = null;
			 		}
			 		
			 		matsProfs = new MateriasProfesorbo(pro,materias,cursadas);
			 	}
			 	
			 } 
			 catch (Exception) 
			 {
			 	matsProfs = null;
			 }
			 
			 return matsProfs;
		}
		
		public Gestión_UTN.bo.ProfesoresMateriabo FindMateriaProfesorByMateria(int mat_id)
		{
			ProfesoresMateriabo profsMats = null;
			
			 try
			 {
			 	Materiabo mat = (0 != mat_id)
			 		? createMateria.FindMateriaByMatId(mat_id)
			 		:null;
			 	
			 	List<MateriaProfesor> matsPro = (null != mat)
			 		? createMatPro.FindMateriaProfesorByMateria(mat.Id)
			 		:null;
			 	
			 	if (null != matsPro) 
			 	{
			 		
			 		List<Profesorbo> profesores =new List<Profesorbo>();
			 		List<Cursadabo> cursadas = new List<Cursadabo>();
			 		
			 		foreach (MateriaProfesor m in matsPro) 
			 		{
			 			Profesorbo pro = createProfesor.FindProfesorByDNI(m.Pro_dni);
			 			
			 			profesores.Add(pro);
			 			
			 			pro = null;
			 			
			 			Cursadabo cur = createCursada.FindCursadasById(m.Cur_id);
			 			
			 			cursadas.Add(cur);
			 			
			 			cur = null;
			 		}
			 		
			 		profsMats = new ProfesoresMateriabo(mat,profesores,cursadas);
			 	}
			 	
			 } 
			 catch (Exception) 
			 {
			 	profsMats = null;
			 }
			 
			 return profsMats;
		}
		
		public Gestión_UTN.bo.MateriasProfesoresCursadabo FindMateriaProfesorByCursada(int cur_id)
		{
			MateriasProfesoresCursadabo matsProfsCurs = null;
			
			 try
			 {
			 	Cursadabo cursada = (0 != cur_id)
			 		? createCursada.FindCursadasById(cur_id)
			 		:null;
			 	
			 	List<MateriaProfesor> matsPro = (null != cursada)
			 		? createMatPro.FindMateriaProfesorByCursada(cursada.Id)
			 		:null;
			 	
			 	if (null != matsPro) 
			 	{
			 		
			 		List<Profesorbo> profesores =new List<Profesorbo>();
			 		List<Materiabo> materias = new List<Materiabo>();
			 		
			 		foreach (MateriaProfesor m in matsPro) 
			 		{
			 			Profesorbo pro = createProfesor.FindProfesorByDNI(m.Pro_dni);
			 			
			 			profesores.Add(pro);
			 			
			 			pro = null;
			 			
			 			Materiabo mat = createMateria.FindMateriaByMatId(m.Mat_id);
			 			
			 			materias.Add(mat);
			 			
			 			mat = null;
			 		}
			 		
			 		matsProfsCurs = new MateriasProfesoresCursadabo(cursada,materias,profesores);
			 	}
			 	
			 } 
			 catch (Exception) 
			 {
			 	matsProfsCurs = null;
			 }
			 
			 return matsProfsCurs;
		}
	}
}
